鐵人賽 React javascript nodejs
鐵人賽第16天,學了這麼多知識,是時候來個實戰讓自己融會貫通一下。![]()
Hello World,也就是To Do List的範例,這個範例可以讓我們練習之前的React招式系列及讓React更優雅的JS系列。

ToDoApp為Top-component:
- 包含一個
title,可用<h2>來設計- 包含
Input及ToDoApp兩個套件
Input元件,其中包含:
- 一個
<input>輸入框- 一個
<button>送出事件
ToDoList元件,內容包含:
- 多個
<div>以顯示所有的代辦事項

ToDoList我們透過Reducer做統一管理,其中:
state: 存放待辦事項的紀錄,我們使用[Array]dispatch:新增、刪除...等存取待辦事項的動作
React第三招,我們可以透過Context+Reducer讓我們可以輕鬆的讓各個元件,進行一致的操作。// ToDoApp.sj
import React, { useReducer, createContext } from "react";
export default function ToDoApp() {
return (
<div>
<h2 style={{ borderBottom: "1.5px black solid" }}>To Do List</h2>
</div>
);
}

ADD新增功能,之後再一點一滴地把其他功能補上// reducers/js
export default function reducers(toDoList, action) {
switch (action.type) {
case "ADD":
return toDoList.push(action.newEvent);
default:
return toDoList;
}
}
Context+ReduceruseReducer將剛剛建立的reducers連結起來,同時我們給予state初始值["Hello", "One", "Two"],以利初步測試// ToDoApp.js
import React, { useReducer, createContext } from "react";
import reducers from "./reducers";
export const ContextStore = createContext();
export default function ToDoApp() {
const appReducer = useReducer(reducers, ["Hello", "One", "Two"]); //<--給予`state`初始值`["Hello", "One", "Two"]`,以利初步測試
return (
<ContextStore.Provider value={{ appReducer: appReducer }}>
<div>
<h2 style={{ borderBottom: "1.5px black solid" }}>To Do List</h2>
</div>
</ContextStore.Provider>
);
}
ContextStore傳遞過來的toDoList一個接一個顯示出來// ToDoList.js
import React, { useContext } from "react";
import { ContextStore } from "./ToDoApp";
export default function ToDoList() {
const { appReducer } = useContext(ContextStore);
const toDoList = appReducer[0];
return (
<div>
{
toDoList.map((e) => (<p>{e}</p>) )
}
</div>
);
}
ToDoApp.js將ToDoList加入喔// ToDoApp.js
import React, { useReducer, createContext } from "react";
import reducers from "./reducers";
import ToDoList from "./ToDoList"; //<-- 加入 ToDoList
export const ContextStore = createContext();
export default function ToDoApp() {
const appReducer = useReducer(reducers, ["Hello", "One", "Two"]);
return (
<ContextStore.Provider value={{ appReducer: appReducer }}>
<div>
<h2 style={{ borderBottom: "1.5px black solid" }}>To Do List</h2>
<ToDoList />
</div>
</ContextStore.Provider>
);
}

Input.js
ToDoApp.js將Input加進來喔//Input.js
import React, {useContext} from 'react'
export default function Input() {
return (
<div>
<input style={{width:"150px"}}></input>
<button>{"Send"}</button>
</div>
)
}

ToDoApp的架構設定好,明天我們來將整個動作串起來,讓整個app更完整。